package edu.del.teamknowledgebase.vo;

import edu.del.teamknowledgebase.entity.User;
import edu.del.teamknowledgebase.utils.DesensitizeUtil;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serial;
import java.io.Serializable;

/**
 * 用户信息 VO（视图对象）
 * 用于返回给前端的用户信息，已脱敏
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class UserVO implements Serializable {
    @Serial
    private static final long serialVersionUID = -2532091555507910534L;
    /**
     * 用户ID
     */
    private Long id;

    /**
     * 用户名
     */
    private String username;

    /**
     * 头像URL
     */
    private String avatar;

    /**
     * 角色：USER/ADMIN
     */
    private String role;

    /**
     * 脱敏后的邮箱：u***@example.com
     */
    private String email;

    /**
     * 脱敏后的手机号：138****8000
     */
    private String phone;


    /**
     * 从 User 实体转换为 UserVO（脱敏）
     *
     * @param user 用户实体
     * @param desensitize 是否脱敏（true=脱敏，false=不脱敏）
     * @return UserVO
     */
    public static UserVO fromUser(User user, boolean desensitize) {
        if (user == null) {
            return null;
        }

        return UserVO.builder()
                .id(user.getId())
                .username(user.getUsername())
                .avatar(user.getAvatar())
                .role(user.getRole())
                .email(desensitize ? DesensitizeUtil.desensitizeEmail(user.getEmail()) : user.getEmail())
                .phone(desensitize ? DesensitizeUtil.desensitizePhone(user.getPhone()) : user.getPhone())
                .build();
    }

    /**
     * 默认脱敏
     */
    public static UserVO fromUser(User user) {
        return fromUser(user, true);
    }
}
